<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Controllers\Tool\ToolController;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;

class DeedController extends Controller
{
    //网站配置
    public function webset(Request $request)
    {
        //获得所有参数
        $data = $request->all();
        //判断数据格式是否正确
        if (is_array($data)) {
            //定义存储路径
            $_path =  config('path.config') . '/webset.php';
            //数据储存
            $result = ToolController::hold_all($_path, $data);
            //判单储存是否成功
            if ($result) {
                //成功返回
                return response($this->_tips('200', '保存成功'));
            } else {
                //失败返回
                return response($this->_tips('204', '保存失败,请确定是否开放读写权限'));
            }
        } else {
            //验证错误返回
            return response($this->_tips('204', '参数格式错误'));
        }
    }

    //通讯服务器配置
    public function server(Request $request)
    {
        //获得所有参数
        $data = $request->all();
        //判断数据格式是否正确
        if (is_array($data)) {
            //定义存储路径
            $_path =  config('path.config') . '/server.php';
            //数据储存
            $result = ToolController::hold_all($_path, $data);
            //判单储存是否成功
            if ($result) {
                //成功返回
                return response($this->_tips('200', '保存成功'));
            } else {
                //失败返回
                return response($this->_tips('204', '保存失败,请确定是否开放读写权限'));
            }
        } else {
            //验证错误返回
            return response($this->_tips('204', '参数格式错误'));
        }
    }

    //上传头像
    public function upimg(Request $request)
    {

        //判断是否是POST上传，应该不会有人用get吧，恩，不会的
        if ($request->isMethod('POST')) {
            //文件保存路径
            $Route_icon = '/upimg/' . date('Ymd') . '/';

            //在源生的php代码中是使用$_FILE来查看上传文件的属性
            //但是在laravel里面有更好的封装好的方法，就是下面这个,显示的属性更多
            $fileCharater = $request->file('file');
            $name = md5($request->name); //用户名
            $fileSize = $fileCharater->getClientSize();
            if ($fileSize > (1024 * 128)) {
                return response($this->_tips(204, '图片不能大于128k'));
            }
            //括号里面的是必须加的 如果括号里面的不加上的话，下面的方法也无法调用的
            if ($fileCharater->isValid()) {
                //获取文件的扩展名 
                $ext = $fileCharater->getClientOriginalExtension();
                //允许上传文件
                $exts = ['jpg', 'png'];

                //验证上传文件
                if (!in_array($ext, $exts)) {
                    return response($this->_tips(204, '不支持的扩展名'));
                }

                //获取文件的绝对路径
                $path = $fileCharater->getRealPath();

                //定义文件名
                // $filename = date('Y-m-d-h-i-s') . '.' . $ext;
                $filename = $name . '.' . $ext;

                //存储文件。disk里面的public。总的来说，就是调用disk模块里的public配置
                Storage::disk('upimg')->put($filename, file_get_contents($path));
                //输出文件路径
                $_path = $Route_icon . $filename;
                return response($this->_tips(200, '上传成功', ['url' => $_path]));
            }
        } else {
            return response($this->_tips(204, '操作失败'));
        }
    }

    //用户信息保存
    public function userinfo(Request $request)
    {
        $id = $request->id;
        $name = $request->name;
        $nick = $request->nick;
        $icon = $request->icon;
        $email = $request->email;

        if (!empty($id)) {
            $data = DB::table('ly_user')->join('ly_info', 'info_id', 'ly_info.uid')->where('id', $id)->first();
            if ($data == null || $data == '[]') {
                return response($this->_tips(204, '操作失败'));
            } else {
                $result = DB::table('ly_info')->where('uid', $data->info_id)->update([
                    'nickname' => $nick,
                    'email' => $email,
                    'icon' => $icon,
                    'uptime' => date('Y-m-d H:i:s', time())
                ]);

                if ($result) {
                    return response($this->_tips(200, '保存成功'));
                } else {
                    return response($this->_tips(204, '保存失败'));
                }
            }
        }
    }

    //用户删除
    public function userdel(Request $request)
    {
        //
        $id = $request->id;
        if (!empty($id)) {
            $data = DB::table('ly_user')->where('id', $id);
            $uid = $data->value('info_id');
            $result = $data->delete();
            if ($result) {
                $result = DB::table('ly_info')->where('uid', $uid)->delete();
                if ($result) {
                    return response($this->_tips(200, '删除成功'));
                } else {
                    return response($this->_tips(204, '个人信息清除失败', $data->value('info_id')));
                }
            } else {
                return response($this->_tips(200, '删除失败'));
            }
        } else {
            return response($this->_tips(204, '操作失败'));
        }
    }

    //房间删除
    public function roomdel(Request $request)
    {
        $id = $request->id;
        if (!empty($id)) {
            $result = DB::table('ly_room')->where('room_id', $id)->delete();
            if ($result) {
                return response($this->_tips(200, '删除成功'));
            } else {
                return response($this->_tips(204, '删除失败'));
            }
        } else {
            return response($this->_tips(204, '操作失败'));
        }
    }

    //禁言/黑名单删除
    public function punishdel(Request $request)
    {
        $id = $request->id;
        if (!empty($id)) {
            $result = DB::table('ly_punish')->where('id', $id)->update(['result' => '0']);
            if ($result) {
                return response($this->_tips(200, '删除成功'));
            } else {
                return response($this->_tips(204, '删除失败'));
            }
        } else {
            return response($this->_tips(204, '操作失败'));
        }
    }

    //历史消息删除
    public function newsdel(Request $request)
    {
        $id = $request->id;
        if (!empty($id)) {
            $result = DB::table('ly_news')->where('mid', $id)->delete();
            if ($result) {
                return response($this->_tips(200, '删除成功'));
            } else {
                return response($this->_tips(204, '删除失败'));
            }
        } else {
            return response($this->_tips(204, '操作失败'));
        }
    }

    //升级等级添加
    public function lvadd(Request $request)
    {
        $title = $request->title;
        $val = $request->val;
        $sign = $request->sign;
        if (!empty($title) && !empty($val) && $sign >= '0') {
            $result = DB::table('ly_lv')->insert([
                'name' => $title,
                'sign' => $sign,
                'exp' => $val
            ]);

            if ($result) {
                return response($this->_tips(200, '添加成功'));
            } else {
                return response($this->_tips(204, '添加失败'));
            }
        } else {
            return response($this->_tips(204, '操作失败'));
        }
    }

    //升级等级删除
    public function lvdel(Request $request)
    {
        $id = $request->id;
        if (!empty($id)) {
            $result = DB::table('ly_lv')->where('id', $id)->delete();
            if ($result) {
                return response($this->_tips(200, '删除成功'));
            } else {
                return response($this->_tips(204, '删除失败'));
            }
        } else {
            return response($this->_tips(204, '操作失败'));
        }
    }

    //积分奖励设置
    public function reward(Request $request)
    {
        $yq = $request->yq;
        $qd = $request->qd;
        $result = DB::table('ly_integral')->update([
            'invite' => $yq,
            'signin' => $qd
        ]);
        if ($result) {
            return response($this->_tips(200, '保存成功'));
        } else {
            return response($this->_tips(200, '保存失败'));
        }
    }
}
